#pragma once

#include "ActionData.h"
#include "TransitionData.h"

/*!
 * \brief Data state
 *
 * Data state
 */

class CStateData : public CFSMData
{
	DECLARE_RTTI_CLASS( CStateData, CFSMData::GetRTTI( ) );

	//================================== METHODS ==============================

public:
	//! Constructor method
	CStateData();
	//! Get state name
	const CString &GetName();
	//! Get entry action data
	const CActionDataPtr &GetEntryActionData(u32_t idx);
	//! Get exit action data
	const CActionDataPtr &GetExitActionData(u32_t idx);
	//! Get process action data
	const CActionDataPtr &GetActionData(u32_t idx);
	//! Get process action data
	const CTransitionDataPtr &GetTransitionData(u32_t idx);
	//! Get size entry action data
	u32_t GetSizeEntryActionData();
	//! Get size exit action data
	u32_t GetSizeExitActionData();
	//! Get size process action data
	u32_t GetSizeActionData();
	//! Get size transition data
	u32_t GetSizeTransitionData();
	
	//================================ DATA MEMBERS ===========================

private:
	CString				m_szName;	
	TActionDataList		m_vEntryActionData;
	TActionDataList		m_vExitActionData;
	TActionDataList		m_vActionData;
	TTransitionDataList	m_vTransitionData;
};

//============================== TYPE DEFINITIONS =========================

typedef SmartPtr<CStateData> CStateDataPtr;
typedef CVector<CStateDataPtr> TStateDataList;


